// @author: caoshi
// @date: 2021/6/1 7:21
package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
)

func MyLogger(ctx *gin.Context) {
	fmt.Println("MyLogger")
}

func WelcomeEndpoint(ctx *gin.Context) {
	fmt.Println("WelcomeEndpoint")
}

// 返回一个处理函数, 在作为参数时要写成 MyHandler()
func MyHandler() gin.HandlerFunc {
	return func(ctx *gin.Context) {
		fmt.Println("自定义的处理函数")
	}
}

func main() {
	// 创建一个不含中间件的路由器
	router := gin.New()

	// 全局中间件, 使用Logger 日志中间件
	router.Use(gin.Logger())
	// 使用中间件 Recovery
	router.Use(gin.Recovery())

	// 路由添加中间件，可以添加任意多个
	// 注意这里参数的写法, GET 方法接收的第二个参数是可变参数,是函数类型的,
	// 可以传多个处理函数
	router.GET("/welcome", MyLogger, WelcomeEndpoint, MyHandler())

	// 授权组
	authorized := router.Group("/")
	authorized.Use(AuthRequired())
	{
		authorized.POST("/login", loginEndPoint)
		authorized.POST("/logout", logoutEndPoint)
		authorized.POST("/register", register)
	}

	_ = router.Run(":8090")

}

/**
自定义的认证操作函数
*/
func AuthRequired() gin.HandlerFunc {
	return func(ctx *gin.Context) {
		fmt.Println("进行认证相关操作 ...")
	}
}

func loginEndPoint(ctx *gin.Context) {
	fmt.Println("用户登录 ...")
}

func logoutEndPoint(ctx *gin.Context) {
	fmt.Println("用户退出系统 ...")
}

func register(ctx *gin.Context) {
	fmt.Println("用户注册 ...")
}
